﻿using ByBikeShop.Site;
using PersistenceLayer.DAL;
using SupportLayer.Constantes;
using SupportLayer.Constantes.OUTROS;
using SupportLayer.Enums;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Uol.PagSeguro.Domain;
using Uol.PagSeguro.Resources;
using Uol.PagSeguro.Service;
using Util;

namespace ByBikeShop.Cliente.Pages
{
	public partial class VerPedido : BasePage
	{
		public int PedidoID
		{
			get
			{
				try
				{
					return Convert.ToInt32(Criptografia.Decriptar(SupportLayer.Constantes.CRIPTO.CHAVE, SupportLayer.Constantes.CRIPTO.VETOR, Request.QueryString[OUTROS.PEDIDO].ToString()));
				}
				catch (Exception)
				{
					return 0;
				}
			}
		}

		protected void Page_Load(object sender, EventArgs e)
		{
			if (PedidoID == 0)
				Response.Redirect("/Cliente/Pages/Home.aspx");

			base.PageLoad();

			if ((Cli == null) || (Cli.ID <= 0))
				Response.Redirect("/Cliente/Pages/Login.aspx");
		}

		public override void CarregaDados()
		{
			try
			{
				PersistenceLayer.Model.Pedidos p = new PedidoDAL().Obter(PedidoID);

				if (p == null)
					throw new ApplicationException("O pedido não pode ser carregado!");

				if ((p.Pedido_Item == null) || (p.Pedido_Item.Count <= 0))
					throw new ApplicationException("O pedido não pode ser carregado!");

				lblNumeroPedido.Text = p.CodigoPedido;
				lblDataPedido.Text = p.Data.ToString("dd/MM/yyyy").Replace("-", "/");

				EnvironmentConfiguration.ChangeEnvironment(false);
				Transaction t = TransactionSearchService.SearchByCode(credentials, p.CodigoPedido, false);

				switch (t.TransactionStatus)
				{
					case (int)Status_Transacao.Aguardando_Pagamento:
						lblStatus.Text = "Aguardando Pagamento";
						break;
					case (int)Status_Transacao.Cancelada:
						lblStatus.Text = "Cancelada";
						break;
					case (int)Status_Transacao.Devolvida:
						lblStatus.Text = "Devolvida";
						break;
					case (int)Status_Transacao.Disponivel:
						lblStatus.Text = "Disponível";
						break;
					case (int)Status_Transacao.Em_Analise:
						lblStatus.Text = "Em análise";
						break;
					case (int)Status_Transacao.Em_Disputa:
						lblStatus.Text = "Em disputa";
						break;
					case (int)Status_Transacao.Paga:
						lblStatus.Text = "Paga";
						break;
				}


				DataTable dt = new DataTable();
				dt.Columns.Add("ID");
				dt.Columns.Add("ImagemProduto");
				dt.Columns.Add("NomeProduto");
				dt.Columns.Add("Quantidade");
				dt.Columns.Add("Preco");

				decimal valorTotal = 0;

				foreach (var pi in p.Pedido_Item.ToList())
				{
					valorTotal += (pi.ValorUnitario * pi.Quantidade);

					dt.Rows.Add
					(
						pi.Pedido_ID,
						ResolveUrl("/Imagens" + pi.Produto.Foto_Principal),
						pi.Produto.Produto_Categoria.Descricao + " " + pi.Produto.Produto_Marca.Descricao + " " + pi.Produto.Modelo,
						pi.Quantidade,
						"R$ " + (pi.ValorUnitario * pi.Quantidade).ToString("0.00")
					);
				}

				lblCustoTotal.Text = "R$ " + valorTotal.ToString("0.00");

				grdCarrinho.DataSource = dt;
				grdCarrinho.DataBind();
			}
			catch (Exception ex)
			{
				string mensagem = "";

				if (ex.Message.Contains("inner exception"))
					if (ex.InnerException.Message.Contains("inner exception"))
						mensagem = ex.InnerException.InnerException.Message;
					else
						mensagem = ex.InnerException.Message;
				else
					mensagem = ex.Message;

				ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "a", "alert('" + mensagem + "');", true);
			}
		}
	}
}